package com.ygsoft.activiti.service;

import com.ygsoft.activiti.model.CompleteTask;
import com.ygsoft.activiti.model.MyCompleteTask;
import com.ygsoft.activiti.model.MyTask;
import org.activiti.engine.task.Task;
import org.springframework.data.domain.Page;

import java.util.List;

/**
 * 使流程运转的方法
 *
 * @author zhx
 * @create 2017-11-13 13:56
 **/
public interface TasksServiceInf {

    /**
     * 查看个人的待办信息
     */
    List<MyTask> getTasksByUserId(String userId, List<String> roleList, int page, int pageSize);

    /**
     * 获取我已经完成的任务列表
     * @param userId
     * @param page
     * @param pageSize
     * @return
     */
    Page<CompleteTask> getMyCompleteTask(String userId, int page, int pageSize);

    /**
     * 获取我已经完成的任务列表后
     * 转换模型为MyCompleteTask
     * @param listCompleteTask
     * @return
     */
    List<MyCompleteTask> getMyCompleteTask(List<CompleteTask> listCompleteTask);
    /**
     * 审批任务
     */
    boolean completeTask(String taskId, String userId, String userName, String comment);

    /**
     * 获取下一步的流程定义
     */

    String getNextTask(String procInstanceId);


    /**
     * 获取当前流程的任务名称
     * @param procInstanceId
     * @return
     */
    String getNowTaskName(String procInstanceId);

    /**
     * 获取当前流程的任务ID
     * @param procInstanceId
     * @return
     */
    String getNowTaskId(String procInstanceId);

    /**
     * 根据id获取任务
     * @param taskId
     * @return
     */
    Task getTaskByTaskId(String taskId);

    /**
     * 获取当前任务审批的用户权限组
     * @param taskId
     * @return
     */
    List<String> getRoleListByTaskId(String taskId);

    /**
     * 获取当前任务的审批人员表
     * @param taskId
     * @return
     */
    List<String> getUserListByTaskId(String taskId);

    /**
     * 跳转流程到某步  注:只跳任务
     * @param processId
     * @param targetTaskDefinitionKey
     * @return
     */
    boolean jumpTask(String processId, String targetTaskDefinitionKey);

    /**
     * 挂起 当挂起一个流程实例的时候 将无法审批
     */
    boolean stopProcessId(String processId);

    /**
     * 激活 激活一个流程实例让他继续
     */
    boolean startProcessId(String processId);

    /**
     * 直接结束 直接让流程到了 结束节点
     */
    boolean finishProcessId(String processId)  throws Exception ;

}
